package com.fg.cloud.manager.mapper;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.fg.cloud.common.PageUtils;
import com.fg.cloud.manager.entry.BaseEntity;

/**
 * @author：
 * @date ： 2017年6月5日 下午10:53:10
 * @Desc ：基础mapper
 */
public interface BaseMapper {
	public Serializable count(Map<String, Object> param);

	public <T extends BaseEntity> List<T> select(Map<String, Object> param);

	public <T extends BaseEntity> Integer update(T t);

	public <T extends BaseEntity> Integer insert(T t);

	public Integer delete(@Param("id") Long id);

	public <T extends BaseEntity> T find(@Param("id") Long id);
	
	/**
	 * 批量删除，根据key自定义删除条件(唯一)
	 * @author around
	 * @param key String
	 * @param values String[]
	 * @return int > 0:true
	 */
	int deletes(@Param("key")String key, @Param("values")String[] values);
	
	/**
	 * 动态新增
	 * @param T 
	 * @return int > 0 : 成功
	 */
	<T extends BaseEntity> int insertSelective(T t);
	
	/**
	 * 动态修改
	 * @param T
	 * @return int > 0 : 成功
	 */
	<T extends BaseEntity> int updateByPrimaryKeySelective(T t);
	
	/**
	 * 获取条件查询的记录总条数
	 * @param condition Map<String, Object>
	 * @return long
	 */
	long filterCount(@Param("condition") Map<String, Object> condition);
	
	/**
	 * 分页查询，封装查询参数，外部封装查询条件，pageinfo.condition
	 * @param pageinfo PageUtils<T>
	 * @return List<BaseEntity>
	 */
	<T extends BaseEntity>List<T> findList(PageUtils<T> pageinfo);
	
}
